有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

eclipse如何在java中检查按钮是否可单击,SeleniumWebDriver。ps:检查是否可点击,不要等到它可点击

enter image description here嘿,我正在用selenium编写一个测试用例,该测试基于一个购物网站(http://www.beechtree.pk/),我想在测试中检查产品选择的大小是否可用。不可用的尺寸在网站上显示为灰色,因此我知道它们不再可点击。我已经尝试使用isEnabled和IsDisplay条件来检查其clickab;但是它们不起作用

ps:我想检查它是否可点击(大小可用),这样如果不可点击,我的程序可以选择另一个大小来进行这个过程(它目前正在随机选择),所以我不想等待它成为可点击的


共 (5) 个答案

  1. # 1 楼答案

    我建议您不要检查随机大小以查看它们是否可用,而是检查所有大小以查看它们是否可用

    在站点中,大小位于SPAN元素中。此大小不可用,请注意元素上的disabledSwatch

    <span id="swatch11" class="swatch disabledSwatch" onclick="colorSelected('attribute133','11','','8')">8</span>
                                      ^^^^^^^^^^^^^^
    

    此大小可用,但disabledSwatch类不存在

    <span id="swatch14" class="swatch" onclick="colorSelected('attribute133','14','','10')">10</span>
    

    使用此信息,我们可以提取所有尺寸,并删除那些不可用的尺寸。这将为我们提供两个列表,一个只列出可用的尺寸,另一个列出不可用的尺寸。这些元素包含指示大小的文本

    下面的代码使用所有这些信息提取所有元素,将它们分为可用元素和不可用元素,然后从每个元素提取大小信息,并将它们存储在两个列表中,availableSizesunavailableSizes。从那里,您可以打印列表或验证某些尺寸是否可用,等等

    List<WebElement> unavailableElements = driver.findElements(By.cssSelector("div.swatchesContainer span.swatch.disabledSwatch"));
    List<WebElement> availableElements = driver.findElements(By.cssSelector("div.swatchesContainer span.swatch"));
    availableElements.removeAll(unavailableElements);
    List<String> unavailableSizes = new ArrayList<String>();
    List<String> availableSizes = new ArrayList<String>();
    for (WebElement e : unavailableElements)
    {
        unavailableSizes.add(e.getText());
    }
    for (WebElement e : availableElements)
    {
        availableSizes.add(e.getText());
    }
    
  2. # 2 楼答案

    像这样的东西不管用吗

            List<WebElement> sizes = new ArrayList<WebElement>();
            for(WebElement size : sizes) {
                if(size.isDisplayed() && size.isEnabled()) {
                    size.click();
                    break;
                }
             }
    
  3. # 3 楼答案

    isEnabled和isDisplayed应该适合您。你能检查一下你是否正确地选择了元素吗。 你能打印这个按钮的文本吗。 虚拟代码:

        public class Test{
    
        public static void main(String[] args) {
                      // TODO Auto-generated method stub
    
        System.setProperty("webdriver.chrome.driver", "C:\\Selenuim\\chromedriver2.3.exe");
        WebDriver driver =  new ChromeDriver();
    
        try{
        driver.get("http://register.rediff.com/register/register.php");
    
        Thread.sleep(2000);
        WebElement e = driver.findElement(By.name("btnemail"));
    
        boolean actualValue = e.isEnabled();
    
        if (actualValue)
               System.out.println("Button is enabled");
        else
               System.out.println("Button is disabled");
    
        Thread.sleep(2000);
    
        }
    catch(Exception ex){
           System.out.println("Exception " + ex.getMessage());
                  }
                  finally{
    
                         driver.close();
                         driver.quit();
                  }
           }
    
    }
    
  4. # 4 楼答案

    正如我看到的,您可以尝试获取class属性并检查它是否包含disabledSwatch

    如果只需要检查可用的尺寸,为什么不使用css选择器,如:

    &13; 第13部分,;
    span[class='swatch']
    和#13;
    和#13;

    可以使用此选择器搜索元素并从中单击“随机”

    Xpath备选方案:

    //*[@class='swatch']
    

    //*[@class='swatch']/..
    
  • # 5 楼答案

    要获取所有可单击的元素,请执行以下操作:

    List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch:not(.disabledSwatch)"))
    

    要获取所有不可单击的元素,请执行以下操作:

    List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch.disabledSwatch"))
    

    要获取随机元素并通过测试光标检查其是否可单击,请执行以下操作:

    List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch"));
    boolean disabled = elms.get(i).getCssValue("cursor") != "pointer";
    

    要获取随机元素并通过测试类检查其是否可单击,请执行以下操作:

    List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch"));
    boolean disabled = elms.get(i).getAttribute("class").contains("disabledSwatch");